/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package byblos.negocio.objeto;

import byblos.negocio.NegocioExcecao;
import byblos.negocio.acomodacao.Acomodacao;
import byblos.negocio.pacote.Pacote;
import byblos.negocio.tela.TipoTela;

/**
 *
 * @author Marco Aurélio
 */
public enum TipoObjeto {

    ACOMODACAO("Acomodação", "acomodacao", Acomodacao.class, TipoTela.ACOMODACAO),
    ATRACAO("Atração", "atracao", Objeto.class, TipoTela.ATRACAO),
    GASTRONOMIA("Gastronomia", "gastronomia", Objeto.class, TipoTela.GASTRONOMIA),
    PACOTE("Pacote", "pacote", Pacote.class, TipoTela.PACOTE),
    SERVICO("Serviço", "servico", Objeto.class, TipoTela.SERVICO);
    private String descricao;
    private String stringTipo;
    private Class<? extends Objeto> classe;
    private TipoTela tipoTela;

    TipoObjeto(String descricao, String stringTipo, Class<? extends Objeto> classe,
            TipoTela tipoTela) {
        this.descricao = descricao;
        this.stringTipo = stringTipo;
        this.classe = classe;
        this.tipoTela = tipoTela;
    }

    public static TipoObjeto getTipo(String stringTipo) {
        for (TipoObjeto tipoObjeto : TipoObjeto.values()) {
            if (stringTipo.equals(tipoObjeto.getStringTipo())) {
                return tipoObjeto;
            }
        }
        throw new NegocioExcecao("Não foi possível definir o tipo do objeto!");
    }

    @Override
    public String toString() {
        return descricao;
    }

    public String getDescricao() {
        return descricao;
    }

    public String getStringTipo() {
        return stringTipo;
    }

    public Class<? extends Objeto> getClasse() {
        return classe;
    }

    public TipoTela getTipoTela() {
        return tipoTela;
    }

    public Objeto getObjeto() {
        try {
            Objeto objeto = classe.newInstance();
            objeto.setTipo(this);
            return objeto;
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    public int getIndice() {
        return ordinal();
    }
}
